/* eslint-disable no-undef */
const Router = require('koa-Router')
const jwt=require('jsonwebtoken')
const main=require('../utils/nodemailer')
const fs=require('fs')
const path=require('path')
//用户数据
const UserData=require('../data/User.json')
//token

const router = new Router()

router.get('/', async (ctx) => {
  ctx.body = 'hello world'
})



//登录
router.post('/login',ctx=>{
    
    const userList=UserData.userLists
    let {username,password,email}=ctx.query
    let user=userList.find(item=>item.username===username&&item.password===password&&item.email===email)
    const token=jwt.sign({
  data: user
}, 'secret', { expiresIn: 60 * 60 });
    if(user){
        ctx.body={
            code:200,
            user:user.username,
            msg:"登录成功",
            token,
            
        }
    }else{

        ctx.body={
            code:401,
            msg:"未找到用户,请前往注册"
        }
    }
    
})

// router.post('/sign', async (ctx) => {
//     // ... 用户存在性检查和邮箱验证代码 ...
// let {email,password}=ctx.request.body
//     // 生成验证码并发送邮件
//     let code1 = Math.floor(Math.random() * 1000000);
//     const messageId = await main(email, code1); // 调用 main 函数并等待结果

//     if (!messageId) {
//         ctx.body = {
//             code: 403,
//             msg: "邮箱发送失败"
//         };
//     } else {
//         ctx.body = {
//             code: 200,
//             msg: "发送验证码成功",
//             code1 // 注意：通常不建议将验证码直接返回给客户端，这里仅作为示例
//         };
//     }
// });







//注册
router.post('/email', async (ctx) => {
    // 假设使用koa-bodyparser或其他中间件来解析POST请求的body
    let { email } = ctx.query;
    console.log(email, '邮箱');

    if (!email) {
        ctx.body = {
            code: 403,
            msg: '邮箱为空,请输入正确的邮箱号'
        };
        return; // 提前返回，避免执行后续代码
    }

    // 邮箱格式验证
    let reg = /^\w+@\w+\.(com|cn)$/;
    if (!reg.test(email)) {
        ctx.body = {
            code: 403,
            msg: '邮箱格式不正确'
        };
        return; // 提前返回
    }

    // 生成验证码
    let Yzm = Math.floor(Math.random() * 1000000); // 变量名从code1改为code，以提高可读性
    const messageId = await main(email, Yzm);
    console.log(messageId, '邮件发送结果'); 

    if (!messageId) {
        ctx.body = {
            code: 403,
            msg: "邮箱发送失败"
        };
    } else {
        
        ctx.body = {
            code: 200,
            msg: "发送验证码成功",
            Yzm

        };
       return ;
        // ctx.body = {
        //     code: 200,
        //     msg: "发送验证码成功",
        //     code1: code 
        // };
    }
});

const emailRegex = /^[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+(?:com|cn)$/;

router.post('/sign', async (ctx) => {
    let { email, username, password } = ctx.query || {}; // 使用 ctx.request.body 解析 POST 请求体
    console.log(email, username, password);

    // 验证邮箱格式
    if (!emailRegex.test(email)) {
        ctx.status = 400;
        ctx.body = { message: 'Invalid email format. It should end with .com or .cn.' };
        return;
    }

    // 读取 UserData
    const UserData = require('../data/User.json');
    
    // 检查用户是否已经存在
    const userExists = UserData.userLists.some(user => user.email === email);
    if (userExists) {
        ctx.status = 400;
        ctx.body = {
             code: 403,
             msg: '这个邮箱已经注册过了哦' 
            };
        return;
    }

    // 添加新用户
    UserData.userLists.push({ email, username, password });
    console.log(UserData.userLists, '用户列表')

    // 写入 UserData 文件
    fs.writeFileSync(path.join(__dirname, '../data/User.json'), JSON.stringify(UserData, null, 2));

    ctx.status = 200;
    ctx.body = {
         code: 200,
         msg: '注册成功,好耶!'
         };
});
//修改新密码
router.post('/modify',async(ctx)=>{
    let {email,password,new_pwd}=ctx.query;
    console.log(email,password,new_pwd,'167');
    const UserData = require('../data/User.json');
    const emails=UserData.userLists.find(item=>item.email===email)

  console.log(emails, '邮箱s')
        //非空校验
         if(!new_pwd.trim()||!password.trim())
        {
            ctx.body={
                code:403,
                msg:'输入的密码不能为空或仅包含空白字符'
            }
        }else{

  if(email)
  {
    //emails存在
    console.log('存入的密码',emails.password,'传过来的密码:',password)
    if(emails.password===password)
    {
        //密码密码一致,不需要修改
        ctx.body={
            code:403,
            msg:'密码一致,不需要修改'
        }

        

    }else{
       



       if(new_pwd===password)
       {
        //新密码和再次输入的密码一致的话就可以修改数据中的密码,将新的密码替换原数据中的密码,并且写入数据中
        UserData.userLists.find(item=>item.email===email).password=new_pwd;
        fs.writeFileSync(path.join(__dirname, '../data/User.json'), JSON.stringify(UserData, null, 2));
        
        ctx.body={
            code:200,
            msg:'修改成功'
        }



       }else{
           ctx.body={
               code:403,
               msg:'新密码和再次输入的密码不一致'
           }

    }
    }



}else{
    //不存在
  ctx.body={
        code:403,
        msg:'邮箱不存在'
  }

  }
        }





  }  )

module.exports = router
